import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

public class HomeWork2 {
    //作业7：实现一个方法 printArray, 以数组为参数, 循环访问数组中的每个元素, 打印每个元素的值.
    public static void printArray(int[] array){
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
    }
    public static void main7(String[] args) {
        int[] array = new int[100];
        for (int i = 0; i < array.length; i++) {
            array[i]=i + 1;
        }
        printArray(array);
    }



    //作业6：创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100
    public static void main6(String[] args) {
        int[] array = new int[100];
        for (int i = 0; i < array.length; i++) {
            array[i]=i + 1;
        }
        System.out.println(Arrays.toString(array));
    }



    //作业5：递归求解汉诺塔问题
    public static void hanNuo(int n,char pos1,char pos2,char pos3){
        if(n == 1){
            move(pos1,pos3);
            return;
        }
        hanNuo(n-1,pos1,pos3,pos2);
        move(pos1,pos3);
        hanNuo(n-1,pos2,pos1,pos3);
    }

    public static void move(char pos1,char pos2){
        System.out.print(pos1 + "->" + pos2 + " ");
    }

    public static void main5(String[] args) {
        hanNuo(1,'A','B','C');//ABC为传参的初始值，并不是固定不变的
        System.out.println();
        hanNuo(2,'A','B','C');
        System.out.println();
        hanNuo(3,'A','B','C');
        System.out.println();
    }




    //作业4：递归求斐波那契数列的第 N 项
    //斐波那契数列不适合利用递归算法求，数字越大就有大量的重复计算，效率较低
    public static int fibNum(int n){
        if(n == 1 || n == 2){
            return 1;
        }
        return fibNum(n - 1) + fibNum(n - 2);
    }
    public static void main4(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("您要求斐波那契数列的第几位？");
        int n = scanner.nextInt();
        System.out.println(fibNum(n));
    }



    //作业3：写一个递归方法，输入一个非负整数，返回组成它的数字之和
    public static int sum2(int n){
        if(n < 10){
            return n;
        }
        return n % 10 + sum2(n/10);
    }
    public static void main3(String[] args) {
        System.out.println(sum2(297938));
    }



    //作业2：递归求 1 + 2 + 3 + ... + 10
    public static int sum(int n){
        if(n == 1){
            return 1;
        }
        return n + sum(n-1);
    }
    public static void main2(String[] args) {
        System.out.println(sum(10));
    }



    //作业1：按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    public static void print1(int n){
        if(n <= 9){
            System.out.println(n%10);
            return;//不能省略
        }
        print1(n/10);
        System.out.println(n % 10);
    }
    public static void main1(String[] args) {
        print1(1234);
    }
}
